perm filename RECOG.SAI[SYS,HE]1 blob
sn#016488 filedate 1972-12-06 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00018 PAGES
RECORD PAGE DESCRIPTION
00001 00001 VALID 00018 PAGES
00003 00002 BEGIN "RECOGNIZER"
00004 00003 α INTERNALS
00007 00004 α LOCAL DECLARATIONS
00009 00005 α MESSAGE PROCEDURE ANALYZE (START OF EXECUTION)
00011 00006 α CALL THE SEGMENTER
00012 00007 α RETURN FROM SEGMENTER - COPY THE BODY DATA
00016 00008 α COPY SCENE - continued
00018 00009 α DETERMINE BASES
00020 00010 α MATCH PROTOTYPE, FIND TRANSFORM
00022 00011 α MUNG THE POINT DATUM, BODYLOOP
00025 00012 α SELECT A POSSIBILITY
00030 00013 α ELIMINATE SUPPORTERS
00032 00014 α CONTINUE
00035 00015 α RESET, call to PREDICTOR
00037 00016 α SUPERIMPOSE THE PREDICTION
00039 00017 α CONTINUE FINISHING
00042 00018 α PROGRAM EXECUTION LOOP
00045 ENDMK
⊗;
BEGIN "RECOGNIZER"
REQUIRE 500 PNAMES;
REQUIRE 1000 NEW_ITEMS;
REQUIRE "PREAMB.SAI[SYS,HE]" SOURCE_FILE;
REQUIRE "SYMBOL.AUX[H,RPO]" SOURCE_FILE;
β REQUIRE "RECDPY.HDR[SYS,HE]" SOURCE_FILE;
REQUIRE "RECOG.AUX[SYS,HE]" SOURCE_FILE;
α INTERNALS;
INTERNAL REAL ITEMVAR L1,L2,L3;
INTERNAL ITEMVAR
TPAIR,POSSIBILITY,TOP,PPAIR,
OBJECT,TMPATR,AREA,
CHAIN,PEAK,STATUS,OCCLUDED,
IMATCH,MATCH,MATCH1,MATCH2,OMATCH,
KIND,EXTERIOR,
S,BACK;
INTERNAL SET PMODS,NEWPOINTS,ATRSET,S0,S00,BACKSET,VERTICALS;
INTERNAL SAFE REAL ARRAY ITEMVAR
V1,V2,V3,V4,MV1,MV2,MV3,MV4;
INTERNAL SAFE REAL ARRAY
FOURBY4[1:4,1:4],
SIZE2[1:2],SIZE3[1:3],SIZE4[1:4],SIZE5[1:5],SIZE7[1:7];
INTERNAL BOOLEAN DEBUG1,DEBUG2,PLOTBOOL,SBOOL,VBOOL,EBOOL,DPYIFLAG;
INTERNAL INTEGER ITEMVAR
IPOINT,NEWR,NEWF,NEWL,NEWP;
INTERNAL SAFE REAL ARRAY PR[1:3];
INTERNAL SAFE REAL ARRAY PROJECT[1:4,1:4];
INTERNAL INTEGER DELC,NC,NAC,NAWDCNT;
INTERNAL INTEGER PAN,TILT,FOCUS;
INTERNAL REAL XPERIN,YPERIN;
INTERNAL REAL COLIN1;
INTERNAL REAL COLIN2;
INTERNAL REAL COLIN3;
INTERNAL REAL COLIN4;
INTERNAL REAL COLIN5;
INTERNAL REAL PARAL1;
INTERNAL REAL VERT1;
INTERNAL REAL ADCOR1;
INTERNAL REAL ADCOR2;
INTERNAL REAL SUBSE1;
INTERNAL REAL SUBSE2;
INTERNAL REAL SUBSE3;
INTERNAL REAL SUBSE4;
INTERNAL REAL PARBA1;
INTERNAL REAL TEE1;
INTERNAL REAL TEE2;
INTERNAL REAL ELZ1;
INTERNAL REAL ELZ2;
INTERNAL REAL XDOT1;
INTERNAL REAL XDOT2;
INTERNAL REAL FINDM1;
INTERNAL REAL FINDM2;
INTERNAL REAL FINDM3;
INTERNAL REAL FINDM4;
INTERNAL REAL INTER1;
INTERNAL REAL INTER2;
INTERNAL REAL INTER3;
INTERNAL REAL INTER4;
INTERNAL REAL MAIN1;
INTERNAL REAL MAIN2;
INTERNAL REAL MAIN3;
INTERNAL REAL MAIN4;
INTERNAL REAL SPLIC1;
INTERNAL REAL SPLIC2;
INTERNAL REAL HIDEN1;
INTERNAL REAL HIDEN2;
INTERNAL REAL SAME1,SAME2,FACTOR;
INTERNAL SET TRIED,TTOPS,KTOPS,AROOUT,SHAFTS,BASES;
α LOCAL DECLARATIONS
;
INTEGER
I,J,K,OLDGLORY,NOVERTICES,NOFACES,ERRFLAG,II,JJ,KK,FILE,
BREAK,EOF,DPYFLAG,BODNUM,FACENUM,LINENUM,POINTNUM,FLAG,
MESS1,XX1,XX2,YY1,YY2,RSHIFT,LSHIFT;
ITEMVAR M,W,OBJ,VAL,Z,R,T,N,IV1,E,BB1,BB2,FIRSTT;
INTEGER ITEMVAR H,X1,Y1,Z1;
REAL ITEMVAR XR,Y,LA,LB,MIN,GL,L;
SET ITEMVAR SIV,GSIV,XS;
ITEMVAR ARRAY IVA[1:3,1:2];
SAFE REAL ARRAY ITEMVAR
X,RAI1,MF,U,V,GB,B,GB1,GB2,B1,B2,GF,F,F1,
GP,P,P1,BB,BBB,PA,PB,PC,MPA,MPB,MPC;
STRING SEGMENTER,STR,STR1;
BOOLEAN SINGLEREGION,EXTRA,MISSING,STARZNBARZ,COMPLEXITY,INDI,BOOL,
BADPROJ;
SET TSTEMS,SOP,PRSET,SA,SB,VISSET,MAYBE,SE,S4,S1,S2,QUESTION,OK,
DOUBLE,S3,UNKNOWN,RECOGNIZED,BOTTOMS,UPSTAIRS,SSET;
REAL FRST,LST,DOTT,MAG,MAXZ;
SAFE REAL ARRAY
CTABLE,CFRAME,NORMLL,LOS[1:3],NORMAL4[1:4],NT,NH[1:4];
LABEL LAB1,LAB2,LAB3;
α MESSAGE PROCEDURE ANALYZE (START OF EXECUTION)
********************************************
********************************************
********************************************
*********** **********
*********** EXECUTION STARTS HERE **********
*********** **********
********************************************
********************************************
********************************************;
MESSAGE PROCEDURE ANALYZE(ITEMVAR S);
BEGIN "ANALYZE"
INTEGER II,JJ;
LABEL CONTINUE,BOTTOMSUP,BODYLOOP,LOCATE,NEXTPLATEAU,
PREDICT1,VERIFI,RESET,AGAIN,NEXTONE,LAB1,LAB2,LAB3,LAB4;
β DPYINIT;
OUTSTR(CVIS(RPP112,I)&'12&'15);
ATRSET←{REGION,BODY,LINE,POINT,SCENE,BACKGROUND,
CORNER,BOUNDARY,ENDPT,FACE,AREA,VERTEX,EDGE};
ATRSET←ATRSET ∪ {TJOINT,BASE,SUPPORTER,OCCLUDER};
ATRSET←ATRSET∪{PPAIR,INSTANCE,INVERSE,STATUS,PARENT};
ATRSET←ATRSET∪{SHAPE,MATCH,MATCH1,MATCH2,FLAVOR};
ATRSET←ATRSET∪{ABOVE,TOP,SON};
$ MAKE SHAPE⊗LBEAM≡CONCAVE;
STARZNBARZ←0;
FOR I←1 S1U 5 DO
⊂ SIZE5[I]←0.0; IF I≤4 THEN SIZE4[I]←0.0;
IF I≤3 THEN SIZE3[I]←0.0;
IF I≤2 THEN SIZE2[I]←0.0 ⊃;
DEBUG1←TRUE;
α CALL THE SEGMENTER
first step is to call the segmenter to read in
the data from the edge finder and pull the bodies apart.;
SEGMENTER←"SEEMOR";
IF RUN
THEN BEGIN "GROUP"
β DPYTELL( "BEFORE CALL TO SEGMENTER" );
β DPYBRK;
β IF ¬YES_SEG
THEN ⊂ DPYTELL ("WHERE'S THE SEGMENTER ??");
β TYPE "START JOB2 AND THEN TYPE <RETURN> TO CONTINUE" EOM;
β DPYBRK ⊃;
ISSUE(7,"RECOGNIZER","SEGMENTER",MESSAGE SEGMENT);
END "GROUP"
ELSE DISKSEG;
α RETURN FROM SEGMENTER - COPY THE BODY DATA
*************************************************************
*************************************************************
************************* ****************************
************************* RETURN ****************************
************************* ****************************
*************************************************************
*************************************************************
;
S←SCENE;
SBOOL←VBOOL←EBOOL←FALSE;
DEBUG1←TRUE;
β DPYINIT;
β DPYLAB("AFTER RETURN FROM SEGMENTER");
α copy the necessary data from the upper segment...;
β DPYTELL("COPY SCENE");
BODNUM←POINTNUM←LINENUM←FACENUM←0;
∀ GB|$ BODY⊗S≡GB DO
BEGIN "COPY SCENE"
B←NEW(FOURBY4);
STR←"BODY"&CVS(BODNUM←BODNUM+1);
NEW_PNAME(B,STR);
MAKE BODY⊗S≡B;
MAKE IMATCH⊗GB≡B;
SIV←NEW;
ASSIGN GSIV|$ BASE⊗GB≡GSIV HOLDS;
MAKE BASE⊗B≡SIV;
MAKE IMATCH⊗GSIV≡SIV;
β DPYTELL("POINTS");
∀ GP|$ POINT⊗GB≡GP DO
BEGIN "POINTS"
STR←"V"&CVS(POINTNUM←POINTNUM+1);
P←NEW(SIZE7);
NEW_PNAME(P,STR);
ARRTRAN(∂(P),$ ∂(GP));
MAKE POINT⊗B≡P;
MAKE IMATCH⊗GP≡P;
END "POINTS";
β DPYTELL("LINES");
∀ GL|$ LINE⊗GB≡GL DO
BEGIN "LINES"
STR←"L"&CVS(LINENUM←LINENUM+1);
L←NEW(0.0);
NEW_PNAME(L,STR);
MAKE LINE⊗B≡L;
MAKE IMATCH⊗GL≡L;
END "LINES";
β DPYTELL("ENDPOINTS");
∀ GL|$ LINE⊗GB≡GL DO
∀ GP|$ ENDPT⊗GL≡GP DO
BEGIN "ENDPOINTS"
ASSIGN L|IMATCH⊗GL≡L HOLDS;
ASSIGN P|IMATCH⊗GP≡P HOLDS;
MAKE ENDPT⊗L≡P;
END "ENDPOINTS";
β DPYTELL("BOUNDARIES");
β DPYTELL("FACES");
∀ GF|$ FACE⊗GB≡GF DO
BEGIN "FACES"
F←NEW(SIZE4);
STR←"F"&CVS(FACENUM←FACENUM+1);
NEW_PNAME(F,STR);
MAKE FACE⊗B≡F;
MAKE IMATCH⊗GF≡F;
END "FACES";
∀ GF|$ FACE⊗GB≡GF DO
∀ GL|$ BOUNDARY⊗GF≡GL DO
BEGIN "BOUNDARIES"
ASSIGN F|IMATCH⊗GF≡F HOLDS;
ASSIGN L|IMATCH⊗GL≡L HOLDS;
MAKE BOUNDARY⊗F≡L;
END "BOUNDARIES";
β DPYTELL("CORNERS");
∀ GF|$ FACE⊗GB≡GF DO
∀ GP|$ CORNER⊗GF≡GP DO
BEGIN "CORNERS"
ASSIGN F|IMATCH⊗GF≡F HOLDS;
ASSIGN P|IMATCH⊗GP≡P HOLDS;
MAKE CORNER⊗F≡P;
END "CORNERS";
END "COPY SCENE";
β DPYVINIT;
α COPY SCENE - continued
;
β DPYTELL("OCCLUDERS");
∀ GB1,GB2|$ OCCLUDER⊗GB1≡GB2 DO
BEGIN "OCCLUDERS"
ASSIGN B1|IMATCH⊗GB1≡B1 HOLDS;
ASSIGN B2|IMATCH⊗GB2≡B2 HOLDS;
MAKE OCCLUDER⊗B1≡B2;
END "OCCLUDERS";
β DPYTELL("ABOVES");
∀ GB1,GB2|$ ABOVE⊗GB1≡GB2 DO
BEGIN "ABOVES"
ASSIGN B1|IMATCH⊗GB1≡B1 HOLDS;
ASSIGN B2|IMATCH⊗GB2≡B2 HOLDS;
MAKE ABOVE⊗B1≡B2;
END "ABOVES";
α copy xform into global arrays;
β DPYTELL("XFORM.");
BEGIN "XFORM"
SAFE REAL ARRAY ITEMVAR XF;
ASSIGN XF|GLOBAL XFORM⊗S≡XF HOLDS;
ARRBLT(A_REC[1,1],$ ∂(XF)[1,1],9);
ARRBLT(LENS_REC[1],$ ∂(XF)[4,1],3);
ARRBLT(AI_REC[1,1],$ ∂(XF)[6,1],9);
END "XFORM";
α set up EXTERIOR lines for each body;
β DPYTELL("EXTERIOR.");
∀ B|BODY⊗S≡B DO
BEGIN "EXTERIOR"
BACKSET←PHI;
∀ XR|LINE⊗B≡XR DO
⊂ SSET←BOUNDARY`XR;
IF LENGTH(SSET)=1
THEN PUT XR IN BACKSET ⊃;
XS←NEW(BACKSET);
MAKE EXTERIOR⊗B≡XS;
END "EXTERIOR";
α DETERMINE BASES
now figure out which are the base edges of each body;
β DPYTELL("BASES.");
BASES←PHI;
∀ B,SIV|BODY⊗S≡B ∧ BASE⊗B≡SIV DO
BEGIN "BASES"
∂(SIV)←BASE_EDGES(B);
IF ∂(SIV)=PHI
THEN IF OCCLUDER⊗B≡ANY
THEN ⊂ "BASE BOMB"
ASSIGN B2|OCCLUDER⊗B≡B2 HOLDS;
TYPE "GET ANOTHER VIEW OF THE SCENE OR TRY MOVING "&
PRINTNAME(B2) EOM ⊃ "BASE BOMB"
ELSE ⊂ "BB1"
TYPE "MISSING BASE FOR BODY - I'M STUCK" EOM;
α STAT_REC←1;
α GO GIVEUP;
CALL (0,"EXIT") ⊃ "BB1";
β DPYBRK;
BASES←BASES∪∂(SIV);
END "BASES";
α now examine the scene and set up supporter (and occluder)
associations between pairs of bodies;
∀ B1,B2|BODY⊗S≡B1 ∧ BODY⊗S≡B2 ∧ (B1≠B2) DO SUPPORT(B1,B2);
I←0;
∀ B1,B2|SUPPORTER⊗B1≡B2 DO
⊂ I←I+1;
TYPE "BODY "&PRINTNAME(B2)&" SUPPORTS BODY "&PRINTNAME(B1)
EOM;
β DPYBRK ⊃;
IF I=0
THEN ⊂ TYPE "ALL BODIES REST ON THE GROUND PLANE." EOM;
β DPYBRK ⊃;
OUTSTR(CVIS(RPP112,I));
β DPYLAB("BEFORE MODELS.");
α MATCH PROTOTYPE, FIND TRANSFORM
Now we begin the recognizing of individual bodies
and the computation of the transform that takes them
out into the real world;
IF ¬ GOT_MODELS
THEN ⊂ "BOMB"
TYPE "GLOBAL MODEL NOT INITIALIZED"&'12&'15&'12&'15&
"YOU LOSE" EOM;
CALL(0,"EXIT") ⊃ "BOMB";
β DPYTELL("PROJECTION PAIRS FOR THE MODELS.");
MAKEPP(RPP112,3,7,1);
MAKEPP(RPP112,2,6,0);
MAKEPP(RPP112,1,4,0);
MAKEPP(RPP122,3,7,1);
MAKEPP(RPP122,2,6,0);
MAKEPP(RPP122,1,4,0);
MAKEPP(RPP124,3,7,1);
MAKEPP(RPP124,2,6,0);
MAKEPP(RPP124,1,4,0);
MAKEPP(RPP114,3,7,1);
MAKEPP(RPP114,2,6,0);
MAKEPP(RPP114,1,4,0);
MAKEPP(CUBE,3,7,1);
MAKEPP(CUBE,2,6,0);
MAKEPP(CUBE,1,4,0);
MAKEPP(RHOMBOID,3,7,1);
MAKEPP(RHOMBOID,2,6,0);
MAKEPP(RHOMBOID,1,4,0);
MAKEPP(WEDGE122,2,5,1);
MAKEPP(WEDGE122,1,4,0);
MAKEPP(WEDGE122,1,3,0);
MAKEPP(WEDGE122,3,6,1);
MAKEPP(WEDGE124,2,5,1);
MAKEPP(WEDGE124,1,4,0);
MAKEPP(WEDGE124,1,3,0);
MAKEPP(WEDGE124,3,6,1);
MAKEPP(LBEAM,5,11,1);
MAKEPP(LBEAM,1,6,0);
MAKEPP(LBEAM,1,4,0);
MAKEPP(LBEAM,4,11,1);
MAKEPP(LBEAM,3,9,1);
MAKEPP(LBEAM,4,10,1);
MAKEPP(LBEAM,4,10,0);
MAKEPP(LBEAM,2,6,0);
MAKEPP(LBEAM,3,8,0);
α MUNG THE POINT DATUM, BODYLOOP
;
β DPYTELL("3-D COORS FOR BODY POINTS");
∀ B,U|BODY⊗S≡B ∧ POINT⊗B≡U DO TABCOOR(U);
RECOGNIZED←PHI;
BOTTOMS←BODY⊗S-SUPPORTER`ANY;
BOTTOMSUP:
β DPYTELL("BOTTOMSUP");
IF BOTTOMS-RECOGNIZED=PHI
THEN GO TO PREDICT1;
B←COP(BOTTOMS-RECOGNIZED);
BODYLOOP:
β DPYTELL("BODYLOOP" );
SUBSE2←FINDM2←0.4;
SUBSE3←FINDM3←9.0;
SUBSE4←0.1;
FINDEDGELENGTHS(B);
AGAIN:
IF LENGTH(POSSIBILITY⊗B)=0 ∧ (¬BεTRIED)
THEN BEGIN "BODYLOOP"
LABEL THRUTESTS;
β DPYS;
β DPYB(B);
β DPYLAB( "CONSIDERING BODY "&PRINTNAME(B));
PMODS←PROTOTYPES;
IF COMPLETE(B)
THEN BEGIN "COMPLETE"
PARTPP(B);
TEST41;
END "COMPLETE"
ELSE BEGIN "PARTFT"
PARTFT(B);
TEST41;
END "PARTFT";
COMPLEXITY←FALSE;
∀ F|FACE⊗B≡F DO
IF LENGTH(CORNER⊗F)>4
THEN COMPLEXITY←TRUE;
IF ¬COMPLEXITY
THEN BEGIN "REMOVE"
PMODS←PMODS-{LBEAM};
β DPYLAB("REMOVING COMPLEX BODIES.");
END "REMOVE";
TEST41;
PARTBEL(B);
TEST41;
PARTBA(B);
TEST41;
PARTNVP(B);
TEST41;
PARTLAC(B);
TEST41;
THRUTESTS:
∀ M|MεPMODS DO MAKE POSSIBILITY⊗B≡M;
END "BODYLOOP";
α SELECT A POSSIBILITY
;
β DPYTELL( "POSSIBILITIES:");
∀ P|POSSIBILITY⊗B≡P DO TYPE PRINTNAME(P)&" " EOS;
TYPE "DONE" EOM;
β DPYLAB("SELECT A PROTOTYPE");
NEXTONE:
IF LENGTH(POSSIBILITY⊗B)≠1
THEN BEGIN "TRYHARDER"
IF LENGTH(POSSIBILITY⊗B)>1
THEN BEGIN "TH2"
P←COP(POSSIBILITY⊗B);
ERASE POSSIBILITY⊗B≡P;
END "TH2"
ELSE IF ¬(BεBOTTOMS)
THEN ∀ B2|SUPPORTER⊗B≡B2 DO
IF LENGTH(POSSIBILITY⊗B2)≠0
THEN ∀ U|POINT⊗B≡U DO TABCOOR(U)
ELSE
ELSE BEGIN "XCASES"
IF BεBOTTOMS ∧ SUBSE3≠4.0
THEN BEGIN "XC1"
β DPYLAB("RESET TOLERENCES AND TRY AGAIN" );
SUBSE2←FINDM2←0.8;
SUBSE3←FINDM3←4.0;
SUBSE4←0.25;
GO TO AGAIN;
END "XC1";
β DPYINFO("GOING TO CONTINUE");
β DPYLAB( "SORRY - HAVEN`T HANDLED THIS CASE YET!");
PUT B IN UNKNOWN;
GO TO CONTINUE;
END "XCASES";
END "TRYHARDER"
ELSE BEGIN "PICK ONE"
P←COP(POSSIBILITY⊗B);
ERASE POSSIBILITY⊗B≡P;
β END "PICK ONE";
DPYLAB("TRY TO SEE IT AS A "&PRINTNAME(P));
LOCATE:
β DPYTELL("NOW TO LOCATE IT!");
FIND4PTS(B,P);
TYPE PRINTNAME(V1)&" "&PRINTNAME(V2)&" "&PRINTNAME(V3)&" "&
PRINTNAME(V4) EOM;
TYPE PRINTNAME(L1)&" "&PRINTNAME(L2)&" "&PRINTNAME(L3) EOM;
IF ¬FINDMATCH(P,B)
THEN GO TO NEXTONE;
TYPE PRINTNAME(MV1)&" "&PRINTNAME(MV2)&" "&PRINTNAME(MV3)&
" "&PRINTNAME(MV4) EOM;
β DPYBRK;
MAKE MATCH⊗V1≡MV1;
MAKE MATCH⊗V2≡MV2;
MAKE MATCH⊗V3≡MV3;
MAKE MATCH⊗V4≡MV4;
IF KIND=PEAK
THEN BEGIN "PEAK"
β DPYLAB("IT'S A PEAK.");
MIN←L1;
IF ABS(∂(L2))<ABS(∂(MIN))
THEN MIN←L2;
IF ABS(∂(L3))<ABS(∂(MIN))
THEN MIN←L3;
S1←{L1,L2,L3}-{MIN};
LA←LOP(S1);
LB←COP(S1);
PA←COP(ENDPT⊗LA-{V2});
PB←COP(ENDPT⊗LB-{V2});
PC←V2;
END "PEAK"
ELSE BEGIN "CHAIN"
β DPYLAB("IT'S A CHAIN.");
IF ABS(∂(L1))>ABS(∂(L3))
THEN L←L1
ELSE L←L3;
PC←COP(ENDPT⊗L2∩ENDPT⊗L);
PA←COP(ENDPT⊗L2-{PC});
PB←COP(ENDPT⊗L-{PC});
END "CHAIN";
MPA←COP(MATCH⊗PA);
MPB←COP(MATCH⊗PB);
MPC←COP(MATCH⊗PC);
TYPE "FINDX TRANSFORM:"&↓&
TAB&"BODY:"&PRINTNAME(B)&↓&
TAB&"BODY PTS:"&PRINTNAME(PA)&" "&PRINTNAME(PB)&" "&PRINTNAME(PC)&↓&
TAB&"MODEL:"&PRINTNAME(P)&↓&
TAB&"MODEL PTS:"&PRINTNAME(MPA)&" "&PRINTNAME(MPB)&
" "&PRINTNAME(MPC) EOM;
FINDX(B,P,PA,PC,PB,MPA,MPC,MPB);
PUT B IN RECOGNIZED;
ERASE MATCH⊗V1≡ANY;
ERASE MATCH⊗V2≡ANY;
ERASE MATCH⊗V3≡ANY;
ERASE MATCH⊗V4≡ANY;
β DPYTELL("FINDX DONE");
β DPYBRK;
α ELIMINATE SUPPORTERS
rule out supporters on the basis of 3-d information;
β DPYTELL("ELIMINATE SUPPORTERS");
∀ B1|SUPPORTER⊗B1≡B DO
BEGIN "SUPPORT"
LABEL OUT9;
∀ F|TOP⊗B≡F DO
BEGIN "TOP"
β DPYLAB("TOP IS: "&PRINTNAME(F));
ASSIGN MF|MATCH⊗F≡MF HOLDS;
ASSIGN X|$ INVERSE⊗B≡X HOLDS;FOR I←1 S1U 4 DO
BEGIN "TOP1"
NORMAL4[I]←0.0;
FOR J←1 S1U 4 DO
NORMAL4[I]←NORMAL4[I]+$ ∂(MF)[J]*$ ∂(X)[J,I];
END "TOP1";
FOR I←1 S1U 3 DO NORMLL[I]←NORMAL4[I];
SIZE3[1]←SIZE3[2]←0.0;
SIZE3[3]←1.0;
IF ABS(DOT_PROD(SIZE3,NORMLL)-DOT_PROD(NORMLL,NORMLL))<
DOT_PROD(NORMLL,NORMLL)/10.0
THEN BEGIN "TOP2"
β DPYLAB("HORIZONTAL FACE CONFIRMED." );
GO TO OUT9;
END "TOP2";
END "TOP";
IF ABOVE⊗B≡B1
THEN BEGIN "SUP1"
β DPYLAB("SUPPORT CONFIRMED FROM VERTICAL XJOINT." );
GO TO OUT9;
END "SUP1";
ASSIGN SIV|BASE⊗B1≡SIV HOLDS;
∀ L|LINE⊗B≡L ∧ LεTSTEMS DO
∀ L1|L1ε∂(SIV) ∧ OCCLUDER⊗L≡L1 DO
IF TPAIR⊗L≡ANY
THEN BEGIN "SUP2"
β DPYTELL(PRINTNAME(B)&" DOES NOT SUPPORT "&
PRINTNAME(B1));
ERASE SUPPORTER⊗B1≡B;
GO TO OUT9;
END "SUP2";
β DPYTELL("ALL T-STEMS INTERSECTING BASE EDGES ARE UNMATCHED.");
OUT9:
END "SUPPORT";
α CONTINUE;
S1←SUPPORTER`B;
IF S1=PHI
THEN GO TO CONTINUE;
B1←COP(S1);
S2←SUPPORTER⊗B1;
IF LENGTH(S2)>1
THEN BEGIN "SUPP 1"
IF S2-RECOGNIZED≠PHI
THEN
CONTINUE: BEGIN "CONTINUE"
β DPYTELL("CONTINUING");
S3←BODY⊗S-RECOGNIZED;
S4←PHI;
∀ B2|B2εS3 DO
IF SUPPORTER⊗B2≤RECOGNIZED
THEN PUT B2 IN S4;
IF S4=PHI
THEN GO TO BOTTOMSUP
ELSE B1←COP(S4);
END "CONTINUE";
S2←SUPPORTER⊗B1;
MAXZ←0.0;
∀ B2|B2εS2 DO
BEGIN "SUPP A"
; α bless our parser;
ASSIGN M|$ INSTANCE⊗M≡B2 HOLDS;
∀ V|$ VERTEX⊗M≡V DO
BEGIN "SUPP B"
;α bless our parser;
FOR I←1 S1U 4 DO
SIZE4[I]←$ ∂(V)[I];
HOMO_XFRM(SIZE4,∂(B2));
IF SIZE4[3]>MAXZ
THEN BEGIN "SUPP C"
B←B2;
MAXZ←SIZE4[3];
END "SUPP C";
END "SUPP B";
END "SUPP A";
GO TO NEXTPLATEAU;
END "SUPP 1";
MAXZ←0.0;
∀ V|$ VERTEX⊗P≡V DO
BEGIN "SUPP 2"
;α bless our parser;
FOR I←1 S1U 4 DO SIZE4[I]←$ ∂(V)[I];
HOMO_XFRM(SIZE4,∂(B));
IF SIZE4[3]>MAXZ
THEN MAXZ←SIZE4[3];
END "SUPP 2";
NEXTPLATEAU:
β DPYINFO("NEXTPLATEAU.");
β DPYLAB("BASE OF "&PRINTNAME(B1)&" AT "&CVG(MAXZ) );
∀ V|POINT⊗B1≡V ∧ (¬POINT⊗B≡V) DO
BEGIN "SUPP 3"
TYPE PRINTNAME(V) EOM;
FOR I←1 S1U 2 DO
∂(V)[I+2]←(MAXZ/LENS_REC[3])*LENS_REC[I]+
∂(V)[I+2]*(1.0-MAXZ/LENS_REC[3]);
∂(V)[5]←MAXZ;
END "SUPP 3";
B←B1;
IF LENGTH(POSSIBILITY⊗B)≠0
THEN FINDEDGELENGTHS(B);
GO TO BODYLOOP;
α RESET, call to PREDICTOR
;
ASSIGN X|$ INVERSE⊗B2≡X HOLDS;
$ ERASE INVERSE⊗B2≡X;
DEL_PNAME(X);
DELETE(X);
$ ERASE INSTANCE⊗ANY≡B2;
B←B2;
P←COP(POSSIBILITY⊗B2);
ERASE POSSIBILITY⊗B2≡P;
GO TO LOCATE;
PREDICT1:
β DPYLAB("PREDICT");
α now activate the PREDICTOR (hidden line eliminator) to do its
thing.;
IF RUN
THEN BEGIN "GROUP"
IF ¬YES_PRED
THEN DO BEGIN "PRED LOOP"
β DPYTELL("NO PREDICTOR AROUND");
TYPE "START JOB3 AND THEN GIVE ME A CARRIAGE RETURN TO CONTINUE"
EOM;
IF DEBUG2
THEN DPYBRK
ELSE STR←INCHWL;
END "PRED LOOP" UNTIL STR="GO" ∨ DPYRTS="GO" ∨ YES_PRED;
ISSUE(7,"RECOGNIZER","PREDICTOR",MESSAGE PREDICT);
END "GROUP"
ELSE "ALONE" DISKOUT;
α pick up set of visible lines as a response;
IF RUN ∨ YES_PRED
THEN BEGIN "ASK PRED"
MESS1←GET_ENTRY('120,NULL,"RECOGNIZER",NULL );
MESS1←QUEUE('600,MESS1);
END "ASK PRED"
ELSE "NO PRED" DISKPRE;
α temporarily jrst return;
DEBUG1←TRUE;
∀ X,Y|MATCH⊗X≡Y DO MAKE MATCH1⊗X≡Y;
ERASE MATCH⊗ANY≡ANY;
α SUPERIMPOSE THE PREDICTION
now superimpose on the prediction the original scene.;
β DPYBRK;
α here is the automatic verify and decision loop.;
VERIFI:
α call for a visual comparison of the two sources of
edge data...;
COMPARE;
α where do we go from here.....??????????;
OK←QUESTION←PHI;
∀ L|LεVISSET DO
BEGIN "VERIFY"
BOOL←FALSE;
∀ E|EDGE⊗S≡E ∧ (¬EεOK) DO
IF SAMELINE(E,L)
THEN BEGIN
TYPE "SAMELINE: "&PRINTNAME(E)&" "&PRINTNAME(L) EOM;
PUT E IN OK;
BOOL←TRUE;
DONE;
END;
IF ¬BOOL
THEN PUT L IN QUESTION;
END "VERIFY";
TYPE "NUMBER IN OK IS "&CVS(LENGTH(OK))&
"AND NUMBER IN QUESTION IS "&CVS(LENGTH(QUESTION)) EOM;
β DPYBRK;
IF LENGTH(QUESTION)=0
THEN RETURN;
∀ L|LεQUESTION DO
BEGIN TYPE PRINTNAME(L) EOM;
β DPYLAB("A QUESTION");
END;
TYPE "WOULD VERIFICATION CONFIRM THE PREDICTION?" EOM;
β DPYBRK;
β IF EQU(DPYRTS,"Y")
β THEN RETURN;
BB←NIL;
α what does this do ??
∀ B|BODY⊗DISPLAYSTRUCT≡B DO
IF LENGTH(QUESTION∩DLINE⊗B)>3
THEN BEGIN
BB←B:
DONE:
END:
IF BB=NIL
THEN RETURN;
α CONTINUE FINISHING
;
X←BB;
UPSTAIRS←{X};
WHILE SUPPORTER⊗ANY≡X DO
BEGIN "KILL POSS"
ASSIGN Y|SUPPORTER⊗Y≡X HOLDS;
PUT Y IN UPSTAIRS;
ERASE POSSIBILITY⊗Y≡ANY;
X←Y;
END "KILL POSS";
α ERASE DBOUNDARY⊗ANY≡ANY;
α ERASE DENDPT⊗ANY≡ANY;
α ERASE PARENT⊗ANY≡ANY;
α ERASE OVERLAP⊗ANY≡ANY;
∀ B|BεUPSTAIRS DO
BEGIN "FLUSH"
LABEL TLAB;
β DPYLAB("FLUSHING "&PRINTNAME(B));
ASSIGN X|$ INVERSE⊗B≡X HOLDS;
$ ERASE INVERSE⊗B≡X;
DEL_PNAME(X);
DELETE(X);
$ ERASE INSTANCE⊗ANY≡B;
α ERASE BODY⊗DISPLAYSTRUCT≡B;
REMOVE B FROM RECOGNIZED;
PUT B IN TRIED;
∀ U|POINT⊗B≡U DO TABCOOR(U);
TYPE "HERE WE ARE" EOM;
END "FLUSH";
∀ B|BODY⊗S≡B DO
BEGIN "DFACE"
S1←PHI;
α ∀ X| DFACE⊗B≡X DO PUT X IN S1;
α ERASE DFACE⊗B≡ANY;
∀ X| X ε S1 DO ⊂ DEL_PNAME(X);DELETE (X) ⊃;
S1←PHI;
α ∀ X| DLINE⊗B≡X DO PUT X IN S1;
α ERASE DLINE⊗B≡ANY;
∀ X| X ε S1 DO ⊂ DEL_PNAME(X);DELETE (X) ⊃;
S1←PHI;
α ∀ X| DPOINT⊗B≡X DO PUT X IN S1;
α ERASE DPOINT⊗B≡ANY;
∀ X| X ε S1 DO ⊂ DEL_PNAME(X);DELETE (X) ⊃;
END "DFACE";
β DPYLAB("GOING TO CONTINUE");
GO TO CONTINUE;
RETURN;
END "ANALYZE";
α PROGRAM EXECUTION LOOP
;
IF ¬YES_REC
THEN PUT_DATA(0,0,"RECOGNIZER");
YES_REC←TRUE;
α INITIALIZATION;
DELC←NC←NAC←NAWDCNT←0;
FILE←7;
PAN←TILT←FOCUS←0;
PLOTBOOL←FALSE;
COLIN1←165.0;
COLIN2←2.0;
COLIN3←5.0;
COLIN4←15.0;
COLIN5←5.0;
PARAL1←15.0;
VERT1←0.2;
ADCOR1←5.0;
ADCOR2←10.0;
SUBSE1←3.0;
SUBSE2←0.4;
SUBSE3←9.0;
SUBSE4←0.3;
PARBA1←10.0;
TEE1←30.0;
TEE2←150.0;
ELZ1←0.04;
ELZ2←1.92;
XDOT1←2.0;
XDOT2←0.5;
FINDM1←3.0;
FINDM2←0.4;
FINDM3←9.0;
FINDM4←20.0;
INTER1←0.1;
INTER2←0.5;
INTER3←1.0;
INTER4←0.05;
MAIN1←30.0;
MAIN2←150.0;
MAIN3←10.0;
MAIN4←0.1;
SPLIC1←170.0;
SPLIC2←3.0;
HIDEN1←3.5;
HIDEN2←0.05;
SAME1←7.0;
SAME2←10.0;
FACTOR←1.0;
TPAIR←NEW;POSSIBILITY←NEW;TOP←NEW;PPAIR←NEW;
OBJECT←NEW;
TMPATR←NEW;AREA←NEW;
CHAIN←NEW;PEAK←NEW;STATUS←NEW;OCCLUDED←NEW;
IMATCH←NEW;MATCH←NEW;
MATCH1←NEW;MATCH2←NEW;EXTERIOR←NEW;OMATCH←NEW;
IPOINT←NEW(0);NEW_PNAME(IPOINT,"midpt");
NEWP←NEW(0);NEW_PNAME(NEWP,"np");
NEWR←NEW(0);NEW_PNAME(NEWR,"nr");
NEWF←NEW(0);NEW_PNAME(NEWF,"nf");
NEWL←NEW(0);NEW_PNAME(NEWL,"nl");
OUTSTR("RECOGNIZER (REC) UP AND READY"&'12&'15);
IF YES_EDGE
THEN WHILE TRUE DO
⊂ MESS1←GET_ENTRY('120,NULL,"RECOGNIZER",NULL);
MESS1←QUEUE('600,MESS1) ⊃
ELSE ANALYZE(SCENE);
END "RECOGNIZER";